﻿Imports System.IO

Public Class GestionOferta
    Private listaOfertas As New List(Of Oferta)
    Public ReadOnly Property ofertas As ObjectModel.ReadOnlyCollection(Of Oferta)
        Get
            Return listaOfertas.AsReadOnly
        End Get
    End Property

    Public Sub New()
        If Not Directory.Exists("Fichero") Then
            Directory.CreateDirectory("Fichero")

        End If
        If Not File.Exists("Fichero\Ofertas.txt") Then
            OfertaInicial()
        Else
            Dim fich As StreamReader = Nothing
            Try
                fich = New StreamReader("Fichero\Ofertas.txt")
                If fich.EndOfStream Then 'El fichero estaba vacío
                    OfertaInicial()
                Else
                    Do Until fich.EndOfStream
                        Dim datos() As String
                        Dim linea As String = fich.ReadLine

                        datos = linea.Split("*")
                        listaOfertas.Add(New Oferta(datos(0), datos(1), datos(2), datos(3)))

                    Loop
                    fich.Close()
                End If
            Catch ex As Exception
                fich.Close()
            End Try
        End If


    End Sub

   
    Public Function Añadir(ByVal ofer As Oferta) As String 'Añade una nueva oferta a las que existian previamente, grabandola en el fichero
        If ofer Is Nothing OrElse ofer.Nombre = "" OrElse ofer.PrecioOferta < 0 Then
            Return "Error, tiene que tener nombre y su precio ser mayor o igual que 0"
        End If
        If listaOfertas.Contains(ofer) Then

            Return "Ya existe esa oferta"

        End If
        listaOfertas.Add(ofer)
        Grabar()
        Return ""
    End Function

    Public Function Borrar(ByVal nombre As String) As String
        ' Borra el producto que se corresponda con ese nombre, siempre que exista. Si lo consigue deberemos hacer que ya no esté en el fichero
        Dim ofer As New Oferta(nombre, "", 0, "")
        If Not listaOfertas.Contains(ofer) Then Return "No existe"
        listaOfertas.Remove(ofer)
        Grabar()
        Return ""
    End Function

    Private Function Grabar() As String

        Dim fic As StreamWriter = Nothing
        Try
            fic = New StreamWriter("Fichero\Ofertas.txt")
            For i = 0 To listaOfertas.Count - 1
                fic.WriteLine(listaOfertas(i).Nombre & "*" & listaOfertas(i).ProductoOferta & "*" & listaOfertas(i).PrecioOferta & "*" & listaOfertas(i).FechaOferta)
            Next
        Catch ex As Exception
            fic.Close()
            Return ex.Message
        End Try

        fic.Close()
        Return ""
        ' Es privada, porque grabo al Añadir y al Borrar desde aquí. El/la usuaria de la clase no necesita saberlo
    End Function

    Private Sub OfertaInicial()
        listaOfertas.Add(New Oferta("Oferta 1", "Salchipapas", 32, "30/06/2016"))
        Grabar()
    End Sub
End Class
